#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

//int main()
//{
//
//	int* p1 = (int*)malloc(sizeof(int));
//
//	int* p2 = new int;
//
//	int* p3 = (int*)malloc(sizeof(int) * 5);
//
//	int* p4 = new int[5];
//
//
//
//	return 0;
//}

//int main()
//{
//
//	int* p1 = (int*)malloc(sizeof(int));
//	*p1 = 1;
//
//	int* p2 = new int(1);
//
//	int* p3 = (int*)malloc(sizeof(int) * 5);
//	for (int i = 0; i < 5; ++i)
//	{
//		p3[i] = i + 1; // 将每个元素初始化为0
//	}
//
//
//	int* p4 = new int[5]{ 1,2,3,4,5 };
//
//
//
//	return 0;
//}

//class A
//{
//public:
//	A(int a = 0)
//		: _a(a)
//	{
//		cout << "A():" << endl;
//	}
//	~A()
//	{
//		cout << "~A():" << endl;
//	}
//private:
//	int _a;
//};
//int main()
//{
//	// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间
//	//还会调用构造函数和析构函数
//
//	A* p1 = (A*)malloc(sizeof(A));
//	//如何对malloc开辟出来的对象进行初始化？？？
//
//	A* p2 = new A(1);
//	//new开辟的对象 很方便初始化
//
//	free(p1);
//
//	delete p2;
//
//	return 0;
//}


class Stack
{
public:
	Stack(int capacity = 4)
	{
		cout << "Stack(int capacity = 4)" << endl;

		_a = new int[capacity];
		_top = 0;
		_capacity = capacity;
	}

	~Stack()
	{
		cout << "~Stack()" << endl;

		delete[] _a;
		_a = nullptr;
		_top = 0;
		_capacity = 0;
	}
private:
	int* _a;
	int  _top;
	int  _capacity;
};

int main()
{
	Stack* p3 = new Stack[10];

	delete[] p3;

	return 0;
}